package engine;

import java.util.ArrayList;

public abstract class AbstractVectorTI<Type> {

    Integer size;

    public AbstractVectorTI() {
    }

    public AbstractVectorTI(Integer size) {
        this.size = size;
    }

    public enum VectorType {

        Dense, Sparse, None
    };

    //Taille du vecteur
    public Integer size() {
        return this.size;
    }

    //Retourne une copie du vecteur
    @Override
    abstract public AbstractVectorTI clone();

    //Ajout de valeur
    abstract public void put(Integer wordID, Double value);

    //Récupération de valeur
    abstract public Double get(Integer wordID);

    //Retourne la norme du vecteur;
    abstract public Double norm();

    //retourne un nouveau vecteur normalisé
    abstract public AbstractVectorTI normalize();

    //distance de manhattan
    abstract public Double distanceManhattan(Type v1, Type v2);

    //distance de euclidienne
    abstract public Double distanceEuclidienne(Type v1, Type v2);

    //distance de minkowski
    abstract public Double distanceMinkowski(Type v1, Type v2, Integer parameter);

    //Retourne le vecteur moyen
    abstract public AbstractVectorTI average(ArrayList<Type> vectors);

    @Override
    abstract public String toString();

    abstract public String toString(ArrayList<String> voc);

    abstract public String toShortString(ArrayList<String> voc, double weightMin);
}
